
package com.barnabe.filters;

import java.awt.image.BufferedImage;

/* @author Arthur F. Zanona */

public class Sobel extends Filtro {

    public static BufferedImage executar( BufferedImage imagem ) {
        int limiar = 80;
        int[][] x = new int[][] {
            {1,2,1},
            {0,0,0},
            {-1,-2,-1}
        };

        int[][] y = new int[][] {
            {1,0,-1},
            {2,0,-2},
            {1,0,-1}
        };

        int alturaImagem = imagem.getHeight() - x.length;
        int larguraImagem = imagem.getWidth() - x.length;

        BufferedImage imagemNova = new BufferedImage( imagem.getRaster().getWidth(), imagem.getRaster().getHeight(), imagem.getType());

         for ( int i = 0 ; i < larguraImagem ; i++  ) {
            for ( int j = 0 ; j < alturaImagem ; j++ ) {

                int gx = 0,
                    gy = 0;

                for ( int k = 0 ; k < x.length ; k++ ) {
                    for ( int l = 0; l < x.length ; l++ ) {
                        int[] rgb_temp = new int[3];
                        imagem.getRaster().getPixel( i + k, j + l ,rgb_temp);
                        gx += x[k][l] * rgb_temp[0];
                        gy += y[k][l] * rgb_temp[0];
                    }
                }

                int g = (int) Math.abs( gx ) + Math.abs( gy ) ;
                g = g > 255 ? 255 : ( limiar > 0 ? ( g > limiar ? 255 : 0 ) : g ) ;
                imagemNova.getRaster().setPixel( i ,  j , new int[] { g, g, g } );
            }
         }
        return imagemNova;
    }

}
